package com.horoscope.astrology.zodiac.signs.free.utils

import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import androidx.core.graphics.ColorUtils


/**
 *  作者    1024
 *  时间    2020/3/4 上午9:30
 *  文件    constellation-android
 *  4.4以前
 *  状态栏不支持设置颜色。
 *  4.4 ～ 5.0
 *  状态栏支持透明效果，但是系统不提供接口进行颜色设置（有办法，文章后面会介绍）。
 *  5.0以上
 *  系统提供接口对状态栏进行任意颜色设置。
 */
object StatusBarUtil {

    /**
     * 设置沉浸式状态栏
     *
     * @param activity 需要设置的activity
     */
    fun setTransparent(activity: Activity) { //API19 以下没有相关Api
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            return
        }
        transparentStatusBar(activity)
//        setStatusBarTextColor(activity, Color.WHITE)
    }

    /**
     * 使状态栏透明
     */
    private fun transparentStatusBar(activity: Activity) {
        val window: Window = activity.window
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS or WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
            window.decorView.systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)

            window.statusBarColor = Color.TRANSPARENT
            window.navigationBarColor = Color.TRANSPARENT
        }
    }

    /**
     * Android 6.0 以上设置状态栏颜色
     */
    fun setStatusBarTextColor(activity: Activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 如果亮色，设置状态栏文字为黑色
//            if (isLightColor(color)) {
//            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
//            } else {
//                activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
//            }
        }
    }

    /**
     * 判断颜色是不是亮色
     *
     * @param color
     * @return
     * @from https://stackoverflow.com/questions/24260853/check-if-color-is-dark-or-light-in-android
     */
    private fun isLightColor(color: Int): Boolean {
        return ColorUtils.calculateLuminance(color) >= 0.5
    }

    /**
     * 将布局设置为状态栏的高度
     *
     * @param context
     * @param view
     */
    fun setStatusBarHeight(context: Context, view: View) { // 获得状态栏高度
        val height = getStatusBarHeight(context)
        val layoutParams: ViewGroup.LayoutParams = view.getLayoutParams()
        layoutParams.height = height
        view.setLayoutParams(layoutParams)
        //        status_bar.requestLayout();//请求重新布局
    }

    /**
     * 获取状态栏高度
     *
     * @param context context
     * @return 状态栏高度
     */
    fun getStatusBarHeight(context: Context): Int { // 获得状态栏高度
        val resourceId: Int =
            context.getResources().getIdentifier("status_bar_height", "dimen", "android")
        return context.getResources().getDimensionPixelSize(resourceId)
    }

    /**
     * 设置状态栏颜色
     *
     * @param activity       需要设置的activity
     * @param color          状态栏颜色值
     */
    fun setColor(activity: Activity, color: String) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            activity.window
                .addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            activity.window.statusBarColor = Color.parseColor(color)
        }
    }

}